from django.views import View
# 导入返回响应
from SaaSDevelTool.data_return_response import create_response
# 导入错误信息装饰器
from SaaSDevelTool.data_return_response import error_message_detection
# 导入分页
from SaaSDevelTool.data_mysql_data import db
# 查询当前参数是否是int类型
from SaaSDevelTool.data_operation import is_number
# 导入创建功能包操作
from SaaSDevelTool.SaaSCenterOperateFunc import create_tenement_package_func, query_package_tenement_list

"""
功能包下对应的数据库配置展示
"""


class SaaSDevelModelPackAgeTableCreate(View):
    @error_message_detection
    def post(self, request):
        # 获取功能包编号
        package_id = request.POST.get("package_id")

        # 获取功能包表名称
        package_table_name = request.POST.get("package_table_name")

        # 判断参数是否完整
        if not all([package_id, package_table_name]):
            return create_response(code=400, msg="功能包编号与表名称为必传参数选项。")

        # 判断参数类型
        if not is_number(package_id):
            return create_response(code=400, msg="功能包编号格式传递错误。")

        # 查询模板库中是否存在对应表
        select_table_sql = """
            SELECT 
                table_name 
            FROM 
                information_schema.tables 
            WHERE
                table_name = '{}' 
            AND 
                table_schema = 'db_tenement_0'
            ;""".format(package_table_name)

        # 获取结果
        table_data = db.findOne(select_table_sql)

        # 判断
        if not table_data:
            return create_response(code=400,
                                   msg="表名：【{}】在模板库中不存在，请前往模板库添加或检查表名后进行重新添加。".format(
                                       package_table_name))

        # 查询数据库中是否存在重复的数据
        query_sum_package_create_name_table_sql = """
            SELECT 
                create_table_name, 
                package_id
            FROM 
                db_saas_center.sum_package_create_name_table 
            WHERE 
                create_table_name = '{}' 
            AND 
                package_id = {}
            ;""".format(package_table_name, package_id)

        # 执行操作
        if db.findOne(query_sum_package_create_name_table_sql):
            return create_response(code=400,
                                   msg="表名【{}】在当前功能包下已存在，请勿重复添加。".format(package_table_name))

        # 拼接将数据插入数据库中的sql语句
        create_sum_package_create_name_table_sql = """
            INSERT INTO 
                db_saas_center.sum_package_create_name_table(
                    create_table_name, 
                    package_id
                )
            VALUES
                ('{}', {})
            ;""".format(package_table_name, package_id)

        # 提交至数据库进行操作
        db.update(create_sum_package_create_name_table_sql)

        # 调用方法查看开启当前功能包的租户
        tenement_list = query_package_tenement_list(package_id)
        # 循环对应的值
        for i in tenement_list:
            # 调用语句
            create_status = create_tenement_package_func(i['tenement_id'], package_id)
            # 判断语句
            if create_status['status'] == False:
                # 返回响应
                return create_response(code=400, msg=create_status['msg'])
        # 返回响应
        return create_response(code=200, msg="当前功能包所需数据表新增成功。")
